package com.lj.demo.springbootshirojwt.util;

import com.google.common.collect.Maps;
import com.google.gson.Gson;

import java.util.Map;
import java.util.concurrent.CopyOnWriteArraySet;

/**
 * Title: 全局常量类
 * Description:
 * Date: 2019年06月26日 10:02
 *
 * @author lvjie@hiynn.com
 * @version 1.0
 * Significant Modify：
 * Date                  Author                 Content
 * =================================================================
 * 2019年06月26日         lvjie@hiynn.com         创建文件,实现基本功能
 * =================================================================
 */
public class Constants {


    private Constants(){

    }

    public static final String HTTP_REQUEST_UNKNONW_VALUE = "unKnown";

    /**
     * 前端请求http请求头携带token的key名称
     */
    public static final String HTTP_HEADER_TOKEN_KEY = "Authorization_token";

    /**
     * 前端请求http请求头携带token的key名称
     */
    public static final String HTTP_HEADER_TOKEN_KEY_REDIS = "Authorization";

    /**
     * 前端请求http请求头携带refreshToken的key名称
     */
    public static final String HTTP_HEADER_REFRESH_TOKEN_KEY = "Authorization_refreshToken";

    /**
     * map中存储token的key
     */
    public static final String TOKEN_KEY = "token";

    /**
     * map中存储refreshToken的key
     */
    public static final String REFRESH_TOKEN_KEY = "refreshToken";

    /**
     * 接口返回成功状态码
     */
    public static final int RESPONSE_SUCCESS_CODE = 0;

    /**
     * 接口返回成功状态描述
     */
    public static final String RESPONSE_SUCCESS_MESSAGE = "success";

    /**
     * 接口返回失败状态码
     */
    public static final int RESPONSE_FAIL_CODE = -1;

    /**
     * 接口返回失败状态描述
     */
    public static final String RESPONSE_FAIL_MESSAGE = "fail";

    /**
     * token过期时间  毫秒
     */
    public static final long TOKEN_EXPIRE_TIME = 30*24*60*60*1000;

    /**
     * token过期时间  毫秒
     */
    public static final long REDIS_TOKEN_EXPIRE_TIME = 1*60*1000;

    /**
     * 刷新token过期时间  规则：设置为token过期时间的2倍
     */
    public static final long REFRESH_TOKEN_EXPIRE_TIME = 2 * TOKEN_EXPIRE_TIME;

    /**
     * token中存储用户姓名的key
     */
    public static final String TOKEN_USER_NAME = "userName";

    /**
     * token中存储用户姓名的key
     */
    public static final String TOKEN_USER_ROLE = "role";

    /**
     * token中存储用户姓名的key
     */
    public static final String TOKEN_USER_PERMISSION = "permission";


    /**
     * token中存储用户最后修改时间
     */
    public static final String TOKEN_USER_UPDATETIME = "updateTime";

    /**
     * 加密token的固定参数
     */
    public static final String  TOKEN_SECRET = "8C0C80490065121DE05011AC05006452";

    /**
     * Gson序列化对象
     */
    public static final Gson COMM_GSON = new Gson();

    /**
     * redis存储token后缀
     */
    public static final String REDIS_KEY_TOKEN = "_token";

    /**
     * redis存储用户对象后缀
     */
    public static final String REDIS_KEY_USER = "_user";

    /**
     * redis存储过期时间  毫秒
     */
    public static final String REDIS_KEY_PASSWORD = "password";

    /**
     * 存储用户密码的容器
     */
    public static Map<String,String> passwordContainer = Maps.newConcurrentMap();

    /**
     * 存储用户token的容器
     */
    public static Map<String,String> tokenContainer = Maps.newConcurrentMap();

    /**
     * 存储用户是否第一次获取刷新token
     */
    public static Map<String,Boolean> userRequestStatusContainer = Maps.newConcurrentMap();

    /**
     * 黑名单  用于退出登录
     */
    public static CopyOnWriteArraySet<String> blackList = new CopyOnWriteArraySet<>();

    /**
     * 分割符
     */
    public static final String SEPARATOR = "_";

    /**
     * 跨域请求方式
     */
    public static final String REQUEST_CROS_METHOD = "options";

}
